home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
-
- # hplj1000:
- # hplj1005:
- # hplj1020:
- #
- # Hotplug script for HP1000/1005 USB laser printers. The model number
- # that this script deals with is determined from the script name.
- #
- # Used to download firmware automatically into the printer when it
- # is powered up or plugged into the USB port.
- #
- # Also, run this script once with the magic argument "install-usermap"
- # to create the proper entry in the /etc/hotplug/usb.usermap file.
- #
- # The inspiration fo this script is from:
- # Oscar Santacreu. Alicante-Spain (2002)
- # Mike Morgan (2004)
- #
-
- # udev calls us twice on FC4! Just want /dev/usb/lp<N>
- case "$DEVNAME" in
- /dev/usb/usb*) exit;;
- esac
-
- PROGNAME="$0"
-
- #
- # Set $DEV to, e.g. /dev/usb/lp0, to force the device you want
- # Else, leave it null to automatically detect the device
- #
- DEV=/dev/usb/lp0
- DEV=""
-
- #
- # Directory to find downloadable HP firmware files sihpMMMM.dl
- #
- FWDIR=/usr/share/foo2zjs/firmware
-
- #
- # Program used to determine USB printer id information
- #
- # NOTE: /usr/bin is NOT mounted at this point
- #
- # e.g. /etc/rc.sysinit:
- # /sbin/start_udev
- # [snip]
- # # Mount all other filesystems (except for NFS and /proc, which is already
- #
- PRINTERID=`which usb_printerid`
-
- #
- # Figure out how to log our messages
- #
- if [ -t 1 ]; then
- # Running from a tty...
- log() {
- echo "$PROGNAME: foo2zjs: $@"
- }
- elif [ -x /usr/bin/logger ]; then
- # Have logger...
- log() {
- logger -t "$PROGNAME" -- "foo2zjs: $@"
- }
- else
- # No logger...
- log() {
- echo "$PROGNAME: foo2zjs: $@" >> /var/log/messages
- }
- fi
-
- #
- # Figure out the model number from the name of this script
- #
- case "$0" in
- *P1005)
- MODEL=P1005; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x3d17 #Model
- ;;
- *P1006)
- MODEL=P1006; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x3e17 #Model
- ;;
- *P1007)
- MODEL=P1007; FWMODEL=P1005 # Alias
- USB1=0x03f0 #Vendor
- USB2=0x4817 #Model
- ;;
- *P1008)
- MODEL=P1008; FWMODEL=P1006 # Alias
- USB1=0x03f0 #Vendor
- USB2=0x4917 #Model
- ;;
- *P1505)
- MODEL=P1505; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x3f17 #Model
- ;;
- *P1505n)
- MODEL=P1505n; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x4017 #Model
- ;;
- *1000)
- MODEL=1000; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x0517 #Model
- ;;
- *1005)
- MODEL=1005; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x1317 #Model
- ;;
- *1018)
- MODEL=1018; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x4117 #Model
- ;;
- *1020)
- MODEL=1020; FWMODEL=$MODEL
- USB1=0x03f0 #Vendor
- USB2=0x2b17 #Model
- ;;
- *)
- log "Only HP LaserJet 100[05],1018,1020,P100[5678],P1505 are supported"
- exit
- ;;
- esac
-
- #
- # The special command line argument "install-usermap" will install
- # the proper entry into the /etc/hotplug/usb.usermap file
- #
- case "$1" in
- install-usermap)
- if [ "$USB2" != "" ]; then
- if [ -w /etc/hotplug/usb.usermap ]; then
- USERMAP=/etc/hotplug/usb.usermap
- elif [ -d /etc/hotplug/usb/ ]; then
- USERMAP=/etc/hotplug/usb/foo2zjs.usermap
- if [ ! -s $USERMAP ]; then
- echo > $USERMAP
- fi
- else
- log "No /etc/hotplug usermap!"
- exit
- fi
- chmod 664 $USERMAP
- ex - $USERMAP <<-EOF
- g/^hplj$MODEL/d
- \$a
- hplj$MODEL 0x0003 $USB1 $USB2 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000
- .
- w
- q
- EOF
- else
- log "I don't know the USB info for this model yet. Please run"
- log "usb_printerid on the usb device and send the output to:"
- log "rick.richardson@comcast.net"
- fi
- exit 0
- ;;
- esac
-
- #
- # Procedure to load a single device with firmware
- #
- load1() {
- _dev="$1"
- fw="$FWDIR/sihp$FWMODEL.dl"
- if [ ! -f "$fw" ]; then
- log "Missing HP LaserJet $MODEL firmware file $fw"
- log "...read foo2zjs installation instructions and run ./getweb $MODEL"
- return 1
- fi
-
- log "loading HP LaserJet $MODEL firmware $fw to $_dev ..."
- # There is a timeout problem with udev and FC4, so spin it off.
- (
- if cat $fw > $_dev; then
- log "... download successful."
- else
- log "... download failed."
- fi
- ) &
- return 0
- }
-
- #
- # OK, now download firmware to any printers that need it
- #
- if [ "$DEV" != "" ]; then
- #
- # force downloading to a specific device
- #
- load1 "$DEV"
- elif [ -x $PRINTERID ]; then
- #
- # Sniff around for printers that need a firmware download
- #
- usblps=`find /dev/usb -name 'lp*'`" "`find /dev -name 'usblp*'`
- for dev in $usblps; do
- status=`$PRINTERID $dev 2>/dev/null | grep -y "hp LaserJet $MODEL"`
- if [ "$status" != "" ]; then
- # This is a LaserJet 100x
- chmod 0666 $dev
- status=`$PRINTERID $dev | grep 'FWVER'`
- if [ "$status" = "" ]; then
- # Firmware is not yet loaded
- load1 "$dev"
- else
- log "HP LaserJet $MODEL firmware already loaded into $dev"
- fi
- fi
- done
- else
- log "HP LaserJet $MODEL firmware was not downloaded..."
- log "...couldn't find $PRINTERID and DEV is not set"
- fi
-